pull: use a single per-transaction syncfs instead of fsync
authorGiuseppe Scrivano <gscrivan@redhat.com>
Thu, 22 Jan 2015 00:05:13 +0000 (01:05 +0100)
committerColin Walters <walters@verbum.org>
Fri, 30 Jan 2015 19:03:42 +0000 (14:03 -0500)
commit27a45e2edbd1c4551b801a957cafcb27b3417fd3
tree5e70d23ce73711f825a3f9a11cff22e6dbc70f0a
parent10642cd7328def59c93a78f71ccd4c25a14de008
pull: use a single per-transaction syncfs instead of fsync

Do not write directly to objects/ but maintain pulled files under tmp/
with a "tmpobject-$CHECKSUM.$OBJTYPE" name until they are syncfs'ed to
disk.

Move them under objects/ at ostree_repo_commit_transaction cleanup
time.

Before (test done on a local network):

$ LANG=C sudo time ./ostree --repo=repo pull origin master

0 metadata, 3 content objects fetched; 83820 KiB; 4 delta parts
fetched, transferred in 417 seconds
16.42user 6.73system 6:57.19elapsed 5%CPU (0avgtext+0avgdata
248428maxresident)k
24inputs+794472outputs (0major+233968minor)pagefaults 0swaps

After:

$ LANG=C sudo time ./ostree --repo=repo pull origin master

0 metadata, 3 content objects fetched; 83820 KiB; 4 delta parts
fetched, transferred in 9 seconds
14.70user 2.87system 0:09.99elapsed 175%CPU (0avgtext+0avgdata
256168maxresident)k
0inputs+794472outputs (0major+164333minor)pagefaults 0swaps

https://bugzilla.gnome.org/show_bug.cgi?id=728065

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
src/libostree/ostree-repo-commit.c
src/libostree/ostree-repo-private.h
src/libostree/ostree-repo.c